CloudWatch Logsに貯めたOSログをmacOSで確認してみた
Amazon CloudWatch Logsに貯めたOSログをAWS CLIで確認してみました。
他のログの確認方法としては、CloudWatchコンソールやS3にエクスポートする方法などがあります。
手元のmacOSでサクッと確認したいなと思い、試してみました。
AWS CLIでサクッと取得しよう
ログの確認には、aws logs get-log-eventsコマンドを使います。
最低限のオプションとして、ロググループ、ログストリームを指定します。
--start-time
と--end-time
を指定すれば、特定時刻のログを取得できます。
時刻はUnix timeをミリ秒で指定します。
例をあげてご説明します。
特定時刻のログを確認する
2018年3月30日10時00分から11時00分のログを確認する例です。
LogGroupName、LogStreamNameは環境に合わせて変更してください。
--query以下は不要であれば、削除してください。
Amazon Linuxの/var/log/messagesログが綺麗に見えるようにしました。
start="2018-03-30T10:00:00+0900" end="2018-03-30T11:00:00+0900" starttime=$(expr `date -j -f %FT%T%z ${start} +%s` \* 1000) endtime=$(expr `date -j -f %FT%T%z ${end} +%s` \* 1000) aws logs get-log-events --log-group-name LogGroupName --log-stream-name LogStreamName --start-time ${starttime} --end-time ${endtime} --query 'events[]' --output text | awk '{ $1 = ""; print }'
10分前から最新のログを確認する
dateコマンドで-v-10M
を指定すると10分前を指定できます。
start=`date -v-10M +"%FT%T%z"` end=`date +"%FT%T%z"` starttime=$(expr `date -j -f %FT%T%z ${start} +%s` \* 1000) endtime=$(expr `date -j -f %FT%T%z ${end} +%s` \* 1000) aws logs get-log-events --log-group-name LogGroupName --log-stream-name LogStreamName --start-time ${starttime} --end-time ${endtime} --query 'events[]' --output text | awk '{ $1 = ""; print }'
時刻の相対指定について、使いそうな例をあげておきます。
[-v[+|-]val[ymwdHMS]]
の形式で指定できます。
30秒前
start=`date -v-30S +"%FT%T%z"`
1時間前
start=`date -v-1H +"%FT%T%z"`
3日前
start=`date -v-3d +"%FT%T%z"`
start-time, end-timeを使わないケース
CloudTrailのログをCloudWatch Logsに連携するようなケースでは、start-time、end-timeを使わずに
ログ中のeventTimeで絞り込む形になると思います。
CloudWatch Logsの時刻とログの時刻が一致しないケースも、ログ中の時間で絞り込む形になるでしょう。
さいごに
Amazon CloudWatch LogsにためたOSログをAWS CLIで確認してみました。
macOS以外で試す場合、dateコマンドのオプションが異なる場合があるので、環境に合わせたオプションを指定してみてください。
検証環境
- macOS High Sierra
- aws-cli/1.11.129